/*
 * @Descripttion:life-cycle
 * @version:
 * @Author: zhaoxiaodong
 * @Date: 2020-09-04 11:16:53
 * @LastEditors  : 胡春花
 * @LastEditTime : 2021-02-02 17:30:10
 */
import Vue from 'vue';
import VueRouter from 'vue-router';
import App from '../App.vue';
import store from '../store/store';
import routes from '../router';

/**
 *  @description  导入官方通信方法
 */
import appStore from '@/utils/app-store';
/**
 *  @description  导入路由重定向
 */
import routerRedirect from '@/utils/router-redirect';

const __qiankun__ = window.__POWERED_BY_QIANKUN__;
let router = null,
  instance = null;
/**
 *  @description  导出生命周期函数
 */
const lifeCycle = () => {
      
    return {
    /**
         * @description  微应用初始化
         * @param {Object} props 主应用下发的props
         * @description  bootstrap 只会在微应用初始化的时候调用一次，下次微应用重新进入时会直接调用 mount 钩子，不会再重复触发
         * @description 通常我们可以在这里做一些全局变量的初始化，比如不会在 unmount 阶段被销毁的应用级别的缓存等
         */
      async bootstrap(props) {
      /* props.emits.forEach(i => {
        Vue.prototype[`$${i.name}`] = i;
      }); */
      },
      /**
         * @description  实例化微应用
         * @param {Object} props 主应用下发的props
         * @description 应用每次进入都会调用 mount 方法，通常我们在这里触发应用的渲染方法
         */
      async mount(props) {
      // 注册应用间通信
        appStore(props);
        // 注册微应用实例化函数
        render(props);
      },
      /**
         * @description  微应用卸载/切出
         */
      async unmount() {
        instance.$destroy();
        instance.$el.innerHTML = '';
        instance = null;
        router = null;
      },
      /**
         * @description  手动加载微应用触发的生命周期
         * @param {Object} props 主应用下发的props
         * @description 可选生命周期钩子，仅使用 loadMicroApp 方式手动加载微应用时生效
         */
      async update(props) {
      }
    };
  },

  /**
 * @description  子应用实例化函数
 * @param {Object} props  qiankun将用户添加信息和自带信息整合，通过props传给子应用
 */
  render = (props = {}) => {
    const { container } = props;
    router = new VueRouter({
    // 默认为 hash 路由模式
    // base: window.__POWERED_BY_QIANKUN__ ? '/index' : '/',
    // mode: 'history',
    // 判断 qiankun 环境则进行路由拦截，判断跳转路由是否有 /subapp 开头前缀，没有则加上
      routes: routes
    });
    instance = new Vue({
      router,
      store,
      render: h => h(App)
    }).$mount(container ? container.querySelector('#app') : '#app');
  };
export { lifeCycle, render };
